κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ μΈ λ€νμ±μ νꡬν©λλ€. μ μΈκ³ κ°λ°μλ€μ μν μ€μ μ¬λ‘λ₯Ό ν΅ν΄ λ€νμ±μ΄ μ½λ μ μ°μ±, μ¬μ¬μ©μ± λ° μ μ§λ³΄μμ±μ μ΄λ»κ² ν₯μμν€λμ§ μμ보μΈμ.
λ€νμ± μ΄ν΄νκΈ°: κΈλ‘λ² κ°λ°μλ₯Ό μν μ’ ν© κ°μ΄λ
그리μ€μ΄ "poly"(λ€μ)μ "morph"(νν)μμ μ λν λ€νμ±(Polymorphism)μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ ν΅μ¬ μμμ λλ€. μ΄λ μλ‘ λ€λ₯Έ ν΄λμ€μ κ°μ²΄κ° λμΌν λ©μλ νΈμΆμ κ°κΈ° λ€λ₯Έ λ°©μμΌλ‘ μλ΅ν μ μλλ‘ ν©λλ€. μ΄ κΈ°λ³Έμ μΈ κ°λ μ μ½λ μ μ°μ±, μ¬μ¬μ©μ± λ° μ μ§λ³΄μμ±μ ν₯μμν€λ©°, μ μΈκ³ κ°λ°μλ€μκ² νμμ μΈ λκ΅¬λ‘ μ리맀κΉνκ³ μμ΅λλ€. μ΄ κ°μ΄λλ λ€νμ±μ μ ν, μ΄μ λ° μ€μ μ μ© μ¬λ‘λ₯Ό λ€μν νλ‘κ·Έλλ° μΈμ΄μ κ°λ° νκ²½μ κ±Έμ³ μ€λͺ νμ¬ μ’ ν©μ μΈ κ°μλ₯Ό μ 곡ν©λλ€.
λ€νμ±μ΄λ 무μμΈκ°?
λ³Έμ§μ μΌλ‘ λ€νμ±μ λ¨μΌ μΈν°νμ΄μ€κ° μ¬λ¬ μ νμ λνλΌ μ μλλ‘ ν©λλ€. μ΄λ λ§μΉ κ³΅ν΅ μ νμ κ°μ²΄μΈ κ²μ²λΌ λ€μν ν΄λμ€μ κ°μ²΄μ λν΄ μλνλ μ½λλ₯Ό μμ±ν μ μμμ μλ―Έν©λλ€. μ€μ λ‘ μ€νλλ λμμ λ°νμ μ νΉμ κ°μ²΄μ λ°λΌ λ¬λΌμ§λλ€. μ΄λ¬ν λμ λμμ΄ λ€νμ±μ κ°λ ₯νκ² λ§λλ μμμ λλ€.
κ°λ¨ν λΉμ λ₯Ό λ€μ΄λ³΄κ² μ΅λλ€. "μ¬μ" λ²νΌμ΄ μλ 리λͺ¨μ»¨μ΄ μλ€κ³ μμν΄ λ³΄μΈμ. μ΄ λ²νΌμ DVD νλ μ΄μ΄, μ€νΈλ¦¬λ° μ₯μΉ, CD νλ μ΄μ΄ λ± λ€μν μ₯μΉμμ μλν©λλ€. κ° μ₯μΉλ "μ¬μ" λ²νΌμ μ체μ μΈ λ°©μμΌλ‘ λ°μνμ§λ§, λΉμ μ κ·Έμ λ²νΌμ λλ₯΄λ©΄ μ¬μμ΄ μμλλ€λ μ¬μ€λ§ μλ©΄ λ©λλ€. μ΄ "μ¬μ" λ²νΌμ΄ λ€νμ μΈν°νμ΄μ€μ΄λ©°, κ° μ₯μΉλ λμΌν λμμ λν΄ λ€λ₯Έ λμ(λ³ν)μ 보μ¬μ€λλ€.
λ€νμ±μ μ’ λ₯
λ€νμ±μ λ κ°μ§ μ£Όμ ννλ‘ λνλ©λλ€.
1. μ»΄νμΌ νμ λ€νμ± (μ μ λ€νμ± λλ μ€λ²λ‘λ©)
μ»΄νμΌ νμ λ€νμ±μ μ μ λ€νμ± λλ μ€λ²λ‘λ©μ΄λΌκ³ λ λΆλ¦¬λ©°, μ»΄νμΌ λ¨κ³μμ ν΄κ²°λ©λλ€. μ΄λ λμΌν ν΄λμ€ λ΄μμ μ΄λ¦μ κ°μ§λ§ μκ·Έλμ²(λ§€κ°λ³μμ μ, μ ν λλ μμκ° λ€λ¦)κ° λ€λ₯Έ μ¬λ¬ λ©μλλ₯Ό κ°μ§λ κ²μ ν¬ν¨ν©λλ€. μ»΄νμΌλ¬λ ν¨μ νΈμΆ μ μ 곡λ μΈμλ₯Ό κΈ°λ°μΌλ‘ νΈμΆν λ©μλλ₯Ό κ²°μ ν©λλ€.
μμ (Java):
\nclass Calculator {\n int add(int a, int b) {\n return a + b;\n }\n\n int add(int a, int b, int c) {\n return a + b + c;\n }\n\n double add(double a, double b) {\n return a + b;\n }\n\n public static void main(String[] args) {\n Calculator calc = new Calculator();\n System.out.println(calc.add(2, 3)); // Output: 5\n System.out.println(calc.add(2, 3, 4)); // Output: 9\n System.out.println(calc.add(2.5, 3.5)); // Output: 6.0\n }\n}\n
μ΄ μμμμ Calculator ν΄λμ€μλ κ°κ° λ€λ₯Έ λ§€κ°λ³μλ₯Ό λ°λ addλΌλ μΈ κ°μ λ©μλκ° μμ΅λλ€. μ»΄νμΌλ¬λ μ λ¬λ μΈμμ μμ μ νμ λ°λΌ μ μ ν add λ©μλλ₯Ό μ νν©λλ€.
μ»΄νμΌ νμ λ€νμ±μ μ΄μ :
- μ½λ κ°λ μ± ν₯μ: μ€λ²λ‘λ©μ ν΅ν΄ λμΌν λ©μλ μ΄λ¦μ λ€λ₯Έ μμ μ μ¬μ©ν μ μμ΄ μ½λλ₯Ό μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- μ½λ μ¬μ¬μ©μ± μ¦λ: μ€λ²λ‘λλ λ©μλλ λ€μν μ νμ μ λ ₯μ μ²λ¦¬ν μ μμΌλ―λ‘ κ° μ νλ³λ‘ λ³λμ λ©μλλ₯Ό μμ±ν νμλ₯Ό μ€μ λλ€.
- νμ μμ μ± κ°ν: μ»΄νμΌλ¬κ° μ€λ²λ‘λλ λ©μλμ μ λ¬λ μΈμμ μ νμ νμΈνμ¬ λ°νμ μ μ ν μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
2. λ°νμ λ€νμ± (λμ λ€νμ± λλ μ€λ²λΌμ΄λ©)
λ°νμ λ€νμ±μ λμ λ€νμ± λλ μ€λ²λΌμ΄λ©μ΄λΌκ³ λ λΆλ¦¬λ©°, μ€ν λ¨κ³μμ ν΄κ²°λ©λλ€. μ΄λ μνΌν΄λμ€μ λ©μλλ₯Ό μ μν λ€μ, νλ μ΄μμ μλΈν΄λμ€μμ λμΌν λ©μλμ λν΄ λ€λ₯Έ ꡬνμ μ 곡νλ κ²μ ν¬ν¨ν©λλ€. νΈμΆλ νΉμ λ©μλλ λ°νμ μ μ€μ κ°μ²΄ μ νμ λ°λΌ κ²°μ λ©λλ€. μ΄λ μΌλ°μ μΌλ‘ μμκ³Ό κ°μ ν¨μ(C++μ κ°μ μΈμ΄) λλ μΈν°νμ΄μ€(Java λ° C#κ³Ό κ°μ μΈμ΄)λ₯Ό ν΅ν΄ λ¬μ±λ©λλ€.
μμ (Python):
\nclass Animal:\n def speak(self):\n print(\"Generic animal sound\")\n\nclass Dog(Animal):\n def speak(self):\n print(\"Woof!\")\n\nclass Cat(Animal):\n def speak(self):\n print(\"Meow!\")\n\ndef animal_sound(animal):\n animal.speak()\n\nanimal = Animal()\ndog = Dog()\ncat = Cat()\n
animal_sound(animal) # Output: Generic animal sound\nanimal_sound(dog) # Output: Woof!\nanimal_sound(cat) # Output: Meow!\n
μ΄ μμμμ Animal ν΄λμ€λ speak λ©μλλ₯Ό μ μν©λλ€. Dogμ Cat ν΄λμ€λ Animalμ μμλ°μ speak λ©μλλ₯Ό μμ λ€λ§μ κ³ μ ν ꡬνμΌλ‘ μ€λ²λΌμ΄λν©λλ€. animal_sound ν¨μλ λ€νμ±μ 보μ¬μ€λλ€. Animalμμ νμλ λͺ¨λ ν΄λμ€μ κ°μ²΄λ₯Ό λ°μ speak λ©μλλ₯Ό νΈμΆν μ μμΌλ©°, κ°μ²΄μ μ νμ λ°λΌ λ€λ₯Έ λμμ λνλ
λλ€.
μμ (C++):
\n#include \n\nclass Shape {\npublic:\n virtual void draw() {\n std::cout << \"Drawing a shape\" << std::endl;\n }\n};\n\nclass Circle : public Shape {\npublic:\n void draw() override {\n std::cout << \"Drawing a circle\" << std::endl;\n }\n};\n\nclass Square : public Shape {\npublic:\n void draw() override {\n std::cout << \"Drawing a square\" << std::endl;\n }\n};\n\nint main() {\n Shape* shape1 = new Shape();\n Shape* shape2 = new Circle();\n Shape* shape3 = new Square();\n
shape1->draw(); // Output: Drawing a shape\n shape2->draw(); // Output: Drawing a circle\n shape3->draw(); // Output: Drawing a square\n
delete shape1;\n delete shape2;\n delete shape3;\n
return 0;\n}\n
C++μμ virtual ν€μλλ λ°νμ λ€νμ±μ νμ±ννλ λ° λ§€μ° μ€μν©λλ€. μ΄ ν€μλκ° μμΌλ©΄ κ°μ²΄μ μ€μ μ νκ³Ό κ΄κ³μμ΄ νμ κΈ°λ³Έ ν΄λμ€μ λ©μλκ° νΈμΆλ©λλ€. override ν€μλ(C++11μ λμ
)λ νμ ν΄λμ€ λ©μλκ° κΈ°λ³Έ ν΄λμ€μ κ°μ ν¨μλ₯Ό μ€λ²λΌμ΄λν μλμμ λͺ
μμ μΌλ‘ λνλ΄λ λ° μ¬μ©λ©λλ€.
λ°νμ λ€νμ±μ μ΄μ :
- μ½λ μ μ°μ± μ¦λ: μ»΄νμΌ νμμ νΉμ μ νμ μμ§ λͺ»ν΄λ λ€μν ν΄λμ€μ κ°μ²΄μ ν¨κ» μλνλ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
- μ½λ νμ₯μ± ν₯μ: κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ λ μμ€ν μ μλ‘μ΄ ν΄λμ€λ₯Ό μ½κ² μΆκ°ν μ μμ΅λλ€.
- μ½λ μ μ§λ³΄μμ± κ°ν: ν ν΄λμ€μ λ³κ²½ μ¬νμ΄ λ€νμ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
μΈν°νμ΄μ€λ₯Ό ν΅ν λ€νμ±
μΈν°νμ΄μ€λ λ€νμ±μ λ¬μ±νκΈ° μν λ λ€λ₯Έ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μΈν°νμ΄μ€λ ν΄λμ€κ° ꡬνν μ μλ κ³μ½μ μ μν©λλ€. λμΌν μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ μΈν°νμ΄μ€μ μ μλ λ©μλμ λν ꡬνμ μ 곡νλλ‘ λ³΄μ₯λ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ‘ λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό μΈν°νμ΄μ€ μ νμ κ°μ²΄μ²λΌ λ€λ£° μ μμ΅λλ€.
μμ (C#):
\nusing System;\n\ninterface ISpeakable {\n void Speak();\n}\n\nclass Dog : ISpeakable {\n public void Speak() {\n Console.WriteLine(\"Woof!\");\n }\n}\n\nclass Cat : ISpeakable {\n public void Speak() {\n Console.WriteLine(\"Meow!\");\n }\n}\n\nclass Example {\n public static void Main(string[] args) {\n ISpeakable[] animals = { new Dog(), new Cat() };\n foreach (ISpeakable animal in animals) {\n animal.Speak();\n }\n }\n}\n
μ΄ μμμμ ISpeakable μΈν°νμ΄μ€λ λ¨μΌ λ©μλ Speakλ₯Ό μ μν©λλ€. Dogμ Cat ν΄λμ€λ ISpeakable μΈν°νμ΄μ€λ₯Ό ꡬννκ³ Speak λ©μλμ λν μ체 ꡬνμ μ 곡ν©λλ€. animals λ°°μ΄μ Dogμ Cat κ°μ²΄λ₯Ό λͺ¨λ λ΄μ μ μλλ°, μ΄λ λ ν΄λμ€ λͺ¨λ ISpeakable μΈν°νμ΄μ€λ₯Ό ꡬννκΈ° λλ¬Έμ
λλ€. μ΄λ₯Ό ν΅ν΄ λ°°μ΄μ μννλ©° κ° κ°μ²΄μ λν΄ Speak λ©μλλ₯Ό νΈμΆν μ μμΌλ©°, κ°μ²΄μ μ νμ λ°λΌ λ€λ₯Έ λμμ λνλ
λλ€.
λ€νμ±μ μν μΈν°νμ΄μ€ μ¬μ©μ μ΄μ :
- λμ¨ν κ²°ν©: μΈν°νμ΄μ€λ ν΄λμ€ κ°μ λμ¨ν κ²°ν©μ μ΄μ§νμ¬ μ½λλ₯Ό λ μ μ°νκ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
- λ€μ€ μμ: ν΄λμ€λ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ μ¬λ¬ λ€νμ λμμ λνλΌ μ μμ΅λλ€.
- ν μ€νΈ μ©μ΄μ±: μΈν°νμ΄μ€λ ν΄λμ€λ₯Ό λ 립μ μΌλ‘ λͺ¨μνκ³ ν μ€νΈνκΈ° μ½κ² λ§λλλ€.
μΆμ ν΄λμ€λ₯Ό ν΅ν λ€νμ±
μΆμ ν΄λμ€λ μ§μ μΈμ€ν΄μ€νν μ μλ ν΄λμ€μ λλ€. μ΄λ€μ ꡬ체μ μΈ λ©μλ(ꡬνμ΄ μλ λ©μλ)μ μΆμ λ©μλ(ꡬνμ΄ μλ λ©μλ)λ₯Ό λͺ¨λ ν¬ν¨ν μ μμ΅λλ€. μΆμ ν΄λμ€μ μλΈν΄λμ€λ μΆμ ν΄λμ€μ μ μλ λͺ¨λ μΆμ λ©μλμ λν ꡬνμ μ 곡ν΄μΌ ν©λλ€.
μΆμ ν΄λμ€λ κ΄λ ¨ ν΄λμ€ κ·Έλ£Ήμ λν κ³΅ν΅ μΈν°νμ΄μ€λ₯Ό μ μνλ λ°©λ²μ μ 곡νλ©΄μλ κ° μλΈν΄λμ€κ° μ체μ μΈ νΉμ ꡬνμ μ 곡ν μ μλλ‘ ν©λλ€. μ΄λ€μ μ’ μ’ μΌλΆ κΈ°λ³Έ λμμ μ 곡νλ©΄μ μλΈν΄λμ€κ° νΉμ ν΅μ¬ λ©μλλ₯Ό ꡬννλλ‘ κ°μ νλ κΈ°λ³Έ ν΄λμ€λ₯Ό μ μνλ λ° μ¬μ©λ©λλ€.
μμ (Java):
\nabstract class Shape {\n protected String color;\n\n public Shape(String color) {\n this.color = color;\n }\n\n public abstract double getArea();\n\n public String getColor() {\n return color;\n }\n}\n\nclass Circle extends Shape {\n private double radius;\n\n public Circle(String color, double radius) {\n super(color);\n this.radius = radius;\n }\n\n @Override\n public double getArea() {\n return Math.PI * radius * radius;\n }\n}\n\nclass Rectangle extends Shape {\n private double width;\n private double height;\n\n public Rectangle(String color, double width, double height) {\n super(color);\n this.width = width;\n this.height = height;\n }\n\n @Override\n public double getArea() {\n return width * height;\n }\n}\n\npublic class Main {\n public static void main(String[] args) {\n Shape circle = new Circle(\"Red\", 5.0);\n Shape rectangle = new Rectangle(\"Blue\", 4.0, 6.0);\n
System.out.println(\"Circle area: \" + circle.getArea());\n System.out.println(\"Rectangle area: \" + rectangle.getArea());\n }\n}\n
μ΄ μμμμ Shapeλ μΆμ λ©μλ getArea()λ₯Ό κ°μ§ μΆμ ν΄λμ€μ
λλ€. Circleκ³Ό Rectangle ν΄λμ€λ Shapeλ₯Ό νμ₯νκ³ getArea()μ λν ꡬ체μ μΈ κ΅¬νμ μ 곡ν©λλ€. Shape ν΄λμ€λ μΈμ€ν΄μ€νν μ μμ§λ§, μ°λ¦¬λ ν΄λΉ μλΈν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄λ€μ Shape κ°μ²΄λ‘ μ·¨κΈνμ¬ λ€νμ±μ νμ©ν μ μμ΅λλ€.
λ€νμ±μ μν μΆμ ν΄λμ€ μ¬μ©μ μ΄μ :
- μ½λ μ¬μ¬μ©μ±: μΆμ ν΄λμ€λ λͺ¨λ μλΈν΄λμ€κ° 곡μ νλ λ©μλμ λν κ³΅ν΅ κ΅¬νμ μ 곡ν μ μμ΅λλ€.
- μ½λ μΌκ΄μ±: μΆμ ν΄λμ€λ λͺ¨λ μλΈν΄λμ€μ κ³΅ν΅ μΈν°νμ΄μ€λ₯Ό κ°μ νμ¬, λͺ¨λ μλΈν΄λμ€κ° λμΌν κΈ°λ³Έ κΈ°λ₯μ μ 곡νλλ‘ λ³΄μ₯ν©λλ€.
- μ€κ³ μ μ°μ±: μΆμ ν΄λμ€λ μ½κ² νμ₯νκ³ μμ ν μ μλ μ μ°ν ν΄λμ€ κ³μΈ΅ ꡬ쑰λ₯Ό μ μν μ μλλ‘ ν©λλ€.
λ€νμ±μ μ€μ μ¬λ‘
λ€νμ±μ λ€μν μννΈμ¨μ΄ κ°λ° μλ리μ€μμ λ리 μ¬μ©λ©λλ€. λ€μμ λͺ κ°μ§ μ€μ μ¬λ‘μ λλ€.
- GUI νλ μμν¬: Qtμ κ°μ GUI νλ μμν¬(μ μΈκ³ λ€μν μ°μ
μμ μ¬μ©λ¨)λ λ€νμ±μ ν¬κ² μμ‘΄ν©λλ€. λ²νΌ, ν
μ€νΈ μμ, λ μ΄λΈμ λͺ¨λ κ³΅ν΅ μμ ― κΈ°λ³Έ ν΄λμ€λ₯Ό μμν©λλ€. μ΄λ€μ λͺ¨λ
draw()λ©μλλ₯Ό κ°μ§κ³ μμ§λ§, κ°μ νλ©΄μ λ€λ₯΄κ² κ·Έλ €μ§λλ€. μ΄λ₯Ό ν΅ν΄ νλ μμν¬λ λͺ¨λ μμ ―μ λ¨μΌ μ νμΌλ‘ μ²λ¦¬νμ¬ κ·Έλ¦¬κΈ° νλ‘μΈμ€λ₯Ό λ¨μνν μ μμ΅λλ€. - λ°μ΄ν°λ² μ΄μ€ μ κ·Ό: Hibernate(μλ° μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μμ μΈκΈ° μλ)μ κ°μ κ°μ²΄-κ΄κ³ν λ§€ν(ORM) νλ μμν¬λ λ€νμ±μ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ κ°μ²΄μ λ§€νν©λλ€. λ€μν λ°μ΄ν°λ² μ΄μ€ μμ€ν (μ: MySQL, PostgreSQL, Oracle)μ κ³΅ν΅ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ κ·Όν μ μμΌλ―λ‘ κ°λ°μλ μ½λλ₯Ό ν¬κ² λ³κ²½νμ§ μκ³ λ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ νν μ μμ΅λλ€.
- κ²°μ μ²λ¦¬: κ²°μ μ²λ¦¬ μμ€ν
μ μ μ©μΉ΄λ κ²°μ , PayPal κ²°μ , μν μ‘κΈμ μ²λ¦¬νκΈ° μν μ¬λ¬ ν΄λμ€λ₯Ό κ°μ§ μ μμ΅λλ€. κ° ν΄λμ€λ 곡ν΅
processPayment()λ©μλλ₯Ό ꡬνν©λλ€. λ€νμ±μ μμ€ν μ΄ λͺ¨λ κ²°μ λ°©λ²μ κ· μΌνκ² μ²λ¦¬νλλ‘ νμ¬ κ²°μ μ²λ¦¬ λ‘μ§μ λ¨μνν©λλ€. - κ²μ κ°λ°: κ²μ κ°λ°μμλ λ€μν μ νμ κ²μ κ°μ²΄(μ: μΊλ¦ν°, μ , μμ΄ν
)λ₯Ό κ΄λ¦¬νκΈ° μν΄ λ€νμ±μ΄ κ΄λ²μνκ² μ¬μ©λ©λλ€. λͺ¨λ κ²μ κ°μ²΄λ 곡ν΅
GameObjectκΈ°λ³Έ ν΄λμ€λ₯Ό μμνκ³update(),render(),collideWith()μ κ°μ λ©μλλ₯Ό ꡬνν μ μμ΅λλ€. κ° κ²μ κ°μ²΄λ νΉμ λμμ λ°λΌ μ΄ λ©μλλ€μ λ€λ₯΄κ² ꡬνν©λλ€. - μ΄λ―Έμ§ μ²λ¦¬: μ΄λ―Έμ§ μ²λ¦¬ μ ν리μΌμ΄μ
μ λ€μν μ΄λ―Έμ§ νμ(μ: JPEG, PNG, GIF)μ μ§μν μ μμ΅λλ€. κ° μ΄λ―Έμ§ νμμ 곡ν΅
load()λ°save()λ©μλλ₯Ό ꡬννλ μ체 ν΄λμ€λ₯Ό κ°μ§λλ€. λ€νμ±μ μ ν리μΌμ΄μ μ΄ λͺ¨λ μ΄λ―Έμ§ νμμ κ· μΌνκ² μ²λ¦¬νλλ‘ νμ¬ μ΄λ―Έμ§ λ‘λ© λ° μ μ₯ νλ‘μΈμ€λ₯Ό λ¨μνν©λλ€.
λ€νμ±μ μ΄μ
μ½λμ λ€νμ±μ λμ νλ©΄ μ¬λ¬ κ°μ§ μ€μν μ΄μ μ μ»μ μ μμ΅λλ€.
- μ½λ μ¬μ¬μ©μ±: λ€νμ±μ λ€μν ν΄λμ€μ κ°μ²΄μ ν¨κ» μλνλ μΌλ°μ μΈ μ½λλ₯Ό μμ±ν μ μλλ‘ νμ¬ μ½λ μ¬μ¬μ©μ±μ μ΄μ§ν©λλ€. μ΄λ μ€λ³΅ μ½λμ μμ μ€μ΄κ³ μ½λλ₯Ό μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
- μ½λ νμ₯μ±: λ€νμ±μ κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ λ μλ‘μ΄ ν΄λμ€λ₯Ό μΆκ°νμ¬ μ½λλ₯Ό νμ₯νκΈ° μ½κ² λ§λλλ€. μ΄λ μλ‘μ΄ ν΄λμ€κ° κΈ°μ‘΄ ν΄λμ€μ λμΌν μΈν°νμ΄μ€λ₯Ό ꡬννκ±°λ λμΌν κΈ°λ³Έ ν΄λμ€λ₯Ό μμν μ μκΈ° λλ¬Έμ λλ€.
- μ½λ μ μ§λ³΄μμ±: λ€νμ±μ ν΄λμ€ κ°μ κ²°ν©λλ₯Ό μ€μ¬ μ½λλ₯Ό μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€. μ΄λ ν ν΄λμ€μ λ³κ²½μ΄ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉ κ°λ₯μ±μ΄ μ λ€λ κ²μ μλ―Έν©λλ€.
- μΆμν: λ€νμ±μ κ° ν΄λμ€μ νΉμ μΈλΆ μ¬νμ μΆμννλ λ° λμμ μ£Όμ΄ κ³΅ν΅ μΈν°νμ΄μ€μ μ§μ€ν μ μκ² ν©λλ€. μ΄λ μ½λλ₯Ό λ μ½κ² μ΄ν΄νκ³ μΆλ‘ ν μ μκ² λ§λλλ€.
- μ μ°μ±: λ€νμ±μ λ°νμμ λ©μλμ νΉμ ꡬνμ μ νν μ μλλ‘ νμ¬ μ μ°μ±μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ λμμ λ€μν μν©μ λ§κ² μ‘°μ ν μ μμ΅λλ€.
λ€νμ±μ λμ κ³Όμ
λ€νμ±μ μλ§μ μ΄μ μ μ 곡νμ§λ§, λͺ κ°μ§ λμ κ³Όμ λ μ μν©λλ€.
- 볡μ‘μ± μ¦κ°: λ€νμ±μ νΉν 볡μ‘ν μμ κ³μΈ΅ ꡬ쑰λ μΈν°νμ΄μ€λ₯Ό λ€λ£° λ μ½λμ 볡μ‘μ±μ μ¦κ°μν¬ μ μμ΅λλ€.
- λλ²κΉ μ΄λ €μ: λ€νμ± μ½λλ λ°νμκΉμ§ μ€μ λ‘ νΈμΆλ λ©μλλ₯Ό μ μ μκΈ° λλ¬Έμ λΉλ€νμ± μ½λλ³΄λ€ λλ²κΉ νκΈ° λ μ΄λ €μΈ μ μμ΅λλ€.
- μ±λ₯ μ€λ²ν€λ: λ€νμ±μ λ°νμμ νΈμΆν μ€μ λ©μλλ₯Ό κ²°μ ν΄μΌ νκΈ° λλ¬Έμ μμ μ±λ₯ μ€λ²ν€λλ₯Ό μ λ°ν μ μμ΅λλ€. μ΄ μ€λ²ν€λλ μΌλ°μ μΌλ‘ 무μν μ μλ μμ€μ΄μ§λ§, μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ μμλ λ¬Έμ κ° λ μ μμ΅λλ€.
- μ€μ© κ°λ₯μ±: λ€νμ±μ μ μ€νκ² μ μ©νμ§ μμΌλ©΄ μ€μ©λ μ μμ΅λλ€. μμμ΄λ μΈν°νμ΄μ€μ κ³Όλν μ¬μ©μ 볡μ‘νκ³ μ·¨μ½ν μ½λλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
λ€νμ± μ¬μ©μ μν λͺ¨λ² μ¬λ‘
λ€νμ±μ ν¨κ³Όμ μΌλ‘ νμ©νκ³ λμ κ³Όμ λ₯Ό μννκΈ° μν΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€.
- μμλ³΄λ€ κ΅¬μ± μ νΈ: μμμ λ€νμ±μ λ¬μ±νκΈ° μν κ°λ ₯ν λꡬμ΄μ§λ§, κ°ν κ²°ν©κ³Ό μ·¨μ½ν κΈ°λ³Έ ν΄λμ€ λ¬Έμ λ‘ μ΄μ΄μ§ μλ μμ΅λλ€. κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ‘ ꡬμ±λλ ꡬμ±(Composition)μ λ μ μ°νκ³ μ μ§λ³΄μκ° μ©μ΄ν λμμ μ 곡ν©λλ€.
- μΈν°νμ΄μ€λ₯Ό μ μ€νκ² μ¬μ©: μΈν°νμ΄μ€λ κ³μ½μ μ μνκ³ λμ¨ν κ²°ν©μ λ¬μ±νλ νλ₯ν λ°©λ²μ λλ€. κ·Έλ¬λ λ무 μΈλΆνλκ±°λ λ무 ꡬ체μ μΈ μΈν°νμ΄μ€λ₯Ό λ§λλ κ²μ νΌνμμμ€.
- 리μ€μ½ν μΉν μμΉ(LSP) μ€μ: LSPλ μλΈνμ μ΄ νλ‘κ·Έλ¨μ μ νμ±μ λ³κ²½νμ§ μκ³ λ κΈ°λ³Έ νμ μΌλ‘ λ체λ μ μμ΄μΌ νλ€κ³ λͺ μν©λλ€. LSPλ₯Ό μλ°νλ©΄ μμμΉ λͺ»ν λμκ³Ό λλ²κΉ νκΈ° μ΄λ €μ΄ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- λ³νμ λλΉν μ€κ³: λ€νμ± μμ€ν μ μ€κ³ν λ, λ―Έλμ λ³νλ₯Ό μμΈ‘νκ³ κΈ°μ‘΄ κΈ°λ₯μ μμμν€μ§ μμΌλ©΄μ μλ‘μ΄ ν΄λμ€λ₯Ό μΆκ°νκ±°λ κΈ°μ‘΄ ν΄λμ€λ₯Ό μ½κ² μμ ν μ μλλ‘ μ½λλ₯Ό μ€κ³νμμμ€.
- μ½λλ₯Ό μ² μ ν λ¬Έμν: λ€νμ± μ½λλ λΉλ€νμ± μ½λλ³΄λ€ μ΄ν΄νκΈ° μ΄λ €μΈ μ μμΌλ―λ‘ μ½λλ₯Ό μ² μ ν λ¬Έμννλ κ²μ΄ μ€μν©λλ€. κ° μΈν°νμ΄μ€, ν΄λμ€ λ° λ©μλμ λͺ©μ μ μ€λͺ νκ³ μ¬μ© λ°©λ²μ μμλ‘ μ 곡νμμμ€.
- λμμΈ ν¨ν΄ μ¬μ©: μ λ΅(Strategy) ν¨ν΄ λ° ν©ν 리(Factory) ν¨ν΄κ³Ό κ°μ λμμΈ ν¨ν΄μ λ€νμ±μ ν¨κ³Όμ μΌλ‘ μ μ©νκ³ λ κ²¬κ³ νκ³ μ μ§λ³΄μνκΈ° μ¬μ΄ μ½λλ₯Ό λ§λλ λ° λμμ΄ λ μ μμ΅λλ€.
κ²°λ‘
λ€νμ±μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νμμ μΈ κ°λ ₯νκ³ λ€μ¬λ€λ₯ν κ°λ μ λλ€. λ€νμ±μ λ€μν μ ν, μ΄μ λ° λμ κ³Όμ λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ μ΄λ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νμ¬ λ μ μ°νκ³ μ¬μ¬μ© κ°λ₯νλ©° μ μ§λ³΄μνκΈ° μ¬μ΄ μ½λλ₯Ό λ§λ€ μ μμ΅λλ€. μΉ μ ν리μΌμ΄μ , λͺ¨λ°μΌ μ± λλ μν°νλΌμ΄μ¦ μννΈμ¨μ΄λ₯Ό κ°λ°νλ , λ€νμ±μ λ λμ μννΈμ¨μ΄λ₯Ό ꡬμΆνλ λ° λμμ΄ λλ κ·μ€ν λꡬμ λλ€.
λͺ¨λ² μ¬λ‘λ₯Ό μ±ννκ³ μ μ¬μ μΈ λμ κ³Όμ λ₯Ό κ³ λ €ν¨μΌλ‘μ¨ κ°λ°μλ λ€νμ±μ λͺ¨λ μ μ¬λ ₯μ νμ©νμ¬ λμμμ΄ μ§ννλ κΈλ‘λ² κΈ°μ νκ²½μ μꡬ μ¬νμ μΆ©μ‘±νλ λ³΄λ€ κ²¬κ³ νκ³ νμ₯ κ°λ₯νλ©° μ μ§λ³΄μνκΈ° μ¬μ΄ μννΈμ¨μ΄ μ루μ μ λ§λ€ μ μμ΅λλ€.